iT邦幫忙

2026 iThome 鐵人賽

DAY 16
0

在.container檔的[install]幾乎千篇一律只有一個設定:WantedBy=default.target
它的目的是什麼?

這可以追溯到第四天的離線安裝Podman時,執行過的一個指令:sudo loginctl enable-linger appuser。就可以在appuser沒登入的情況下,仍可以啟動該appuser預先啟動的服務,所以rootless帳號的target就預設是default.target,在.container檔的[install]設定WantedBy=default.target就是告訴Linux希望一開機時,以appuser的帳號背景啟動本服務。

那target是什麼單位?跟service一樣同屬systemd的一種unit類型。其它Unit類型還有socket、mount、timer、path等。
target特殊在於它不是daemon也沒PID,而是告訴Linux說有這個帳號在就要拉起Wants的所有服務,可以用以下指令看appuser預設要啟動哪些服務。

$ systemctl --user list-dependencies default.target 
default.target
● ├─a2a-api.service
● ├─a2a-auth.service
● ├─a2a-batch.service
● ├─a2a-proxy.service
● ├─a2a-web.service
● └─basic.target
●   ├─systemd-tmpfiles-setup.service
●   ├─paths.target
●   ├─sockets.target
●   │ └─dbus.socket
●   └─timers.target
●     ├─grub-boot-success.timer
●     └─systemd-tmpfiles-clean.timer

default.taget裡還包括basic.target,是該rootless基本要啟用哪些unit,已在Podman Quadlet範圍之外。而root帳的target通常是multi-user.target或graphical.target,有興趣的讀者可另行研究。


而除了WantedBy,在[install]標籤還支援哪些key?列表如下:

Key 意義 常用程度
WantedBy= 某 target 啟動時,希望一起啟動此 service ★★★★★
RequiredBy= 某 target/unit 啟動時,強制需要此 service ★★
UpheldBy= 對方 active 期間,持續維持此 service active
Alias= 替產生的 service 建另一個名稱
DefaultInstance= template Quadlet 的預設 instance 特殊用途
  • RequiredBy:default.target要正常成立,這個service是必要dependency,所以應用系統類比如本A2A就不適合。
  • UpheldBy:它相當於[Service]的Restart值為on-failure,差別在是service自己異常自己重啟,而UpheldBy=default.target則通知service要重啟。
  • Alias:比如在a2a-proxy.container設定Alias=proxy,則·systemctl --user status a2a-proxy也可以用systemctl --user status proxy替代。
  • DefaultInstance:這是進階的template Quadlet議題,若有研究到再補。

上一篇
.container的Service標籤
下一篇
.container的Container標籤
系列文
Podman Quadlet-容器服務化(在單體系統到微服務之間)18
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言